package com.ctshk.rpc.airexpress.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.AppReq;
import com.ctshk.rpc.airexpress.dto.app.AirportExpressCacheDTO;
import com.ctshk.rpc.airexpress.dto.app.AirportExpressChannelDTO;
import com.ctshk.rpc.airexpress.dto.app.AirportExpressH5DTO;
import com.ctshk.rpc.airexpress.dto.app.AirportExpressPCDTO;
import com.ctshk.rpc.airexpress.req.cache.CacheOpsReq;
import com.ctshk.rpc.airexpress.req.cache.CacheSetReq;
import com.ctshk.rpc.airexpress.req.cache.GetInfoAppReq;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 机场快线表 C端服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-02-05
 */
public interface IAirportExpressAppService {

    /**
     * 机场快线 - 构建所有渠道,预订列表数据
     *
     * @param channelIds 渠道ID列表,为空时查全部缓存
     * @return
     */
    Result<List<AirportExpressChannelDTO>> buildCacheData(List<Long> channelIds, List<Long> productIds);

    /**
     * 机场快线 - 更新缓存
     *
     * @param req
     * @return
     */
    Result cacheUpdate(CacheOpsReq req);

    /**
     * 机场快线 - 添加缓存
     *
     * @param productChannelList
     * @return
     */
    Map<String, Boolean> cacheAdd(List<AirportExpressChannelDTO> productChannelList);

    Result cacheInit();

    /**
     * 机场快线 - 初始化缓存
     *
     * @param channelIds
     * @return
     */
    Result cacheInit(List<Long> channelIds);

    /**
     * 机场快线 - 删除缓存 - 按照产品id删除
     *
     * @param cacheOpsReq
     * @return
     */
    Result cacheDelete(CacheOpsReq cacheOpsReq);

    /**
     * 机场快线 - 删除缓存 - 删除缓存分区
     *
     * @return
     */
    Result cacheDelete();

    /**
     * 机场快线 - PC查询首页缓存
     *
     * @return
     */
    Result<AirportExpressPCDTO> getPCHomeList(Long channelId);

    /**
     * 机场快线 - 剩余票数缓存操作
     *
     * @param req
     * @return
     */
    Result remainderNumberCacheOps(CacheSetReq req);

    /**
     * +
     * 机场快线 - H5查询首页缓存
     *
     * @return
     */
    Result<AirportExpressH5DTO> getH5HomeList(Long channelId);

    /**
     * 根据产品ID获取缓存信息(无更新缓存)
     * @param id
     * @param appReq
     * @return
     */
    Result<AirportExpressCacheDTO> getInfo(Long id, AppReq appReq);
}
